package com.zmn.plat.services.interfaces.channel;

import com.zmn.common.dto.VtDTO;
import com.zmn.plat.model.entity.channel.*;
import com.zmn.plat.model.vo.channel.ChannelCountVo;

import java.util.List;

/**
 * 渠道新
 *
 * @author xiangjunming
 * @since 2019 /08/19 11:57:57
 */
public interface ChannelService {

    /**
     * 根据ID查询渠道
     *
     * @param channelId
     *            the channel id
     * @return the channel new
     */
    Channel findByKey(Integer channelId);

    /**
     * 根据渠道ID查询渠道名称
     *
     * @param channelId 渠道id
     * @return 渠道名称
     * @author xujie
     * @since  2021-03-02 18:10
     */
    String findNameByKey(Integer channelId);

    /**
     * 根据渠道ID列表查询渠道名称
     *
     * @param channelIdList 渠道id列表
     * @return 渠道名称
     * @author xujie
     * @since  2021-04-13
     */
    List<ChannelIdAndName> listNameByChannelIds(List<Integer> channelIdList);

    /**
     * 根据搜索值模糊查询渠道id
     *
     * @param searchValue 搜索值
     * @return 渠道id 列表
     * @author xujie
     * @since 2021-04-13
     */
    List<Integer> findChannelIdBySearchValue(String searchValue);

    /**
     * 根据ID查询渠道
     *
     * @param channelIds
     *            the channel id
     * @return the channel new
     */
    List<Channel> listByChannelIds(List<Integer> channelIds);

    /**
     * 查询一级渠道
     *
     * @return the list
     */
    List<Channel> listOneLevelChannel();

    /**
     * 查询二级渠道
     *
     * @param plat
     *            可传参数
     * @param channelType
     *            可传参数
     * @return the list
     */
    List<Channel> listTwoLevelChannel(Integer plat, Integer channelType);

    /**
     * 获取所有非啄金客类型的二级渠道
     *
     * @param plat
     *            可传参数
     * @param channelType
     *            可传参数
     * @return the list
     */
    List<Channel> listChannelByNotCps(Integer plat, Integer channelType);

    /**
     * 根据父ID查询渠道
     *
     * @param parentId
     *            the parent id
     * @return the list
     */
    List<Channel> listByParentId(Integer parentId);

    /**
     * 根据公司ID查询渠道
     *
     * @param companyId
     *            the company id
     * @return the list
     */
    List<Channel> listByCompanyId(Integer companyId);

    /**
     * 根据渠道别名模糊匹配渠道信息
     *
     * @param anotherName 渠道别名 必传
     * @return VtDTO(channelId, channelAnotherName, status)
     */
    List<VtDTO> listVtByChannelAnotherName(String anotherName);

    /**
     * 根据平台标识查询渠道
     *
     * @param plat
     *            the plat
     * @return the list
     */
    List<Channel> listByPlat(Integer plat);

    /**
     * 根据条件查询渠道
     *
     * @param query
     *            the query
     * @return the list
     */
    List<Channel> listByQuery(ChannelQuery query);

    /**
     * 根据渠道订单配置和渠道基本信息查询渠道
     * @param query
     * @return
     */
    List<ChannelSimpleVO> listByCombinationQuery(ChannelCombinationQuery query);

    /**
     * 根据是否允许贴花查询渠道vtDto信息
     * @param applique 是否允许贴花 1不允许 2允许
     * @param rank     渠道层级 1一级 2二级
     * @return
     */
    List<VtDTO> listVtByAppliqueAndRank(Integer applique, Integer rank);

    /**
     * 根据条件查询渠道复合信息（包含订单配置和渠道基本信息）
     * @param query
     * @return
     */
    List<ChannelVO> listChannelVoByQuery(ChannelQuery query);

    /**
     * 查询所有渠道
     *
     * @return the list
     */
    List<Channel> listAll();

    /**
     * 根据渠道类型查询渠道
     *
     * @param channelType
     *            the channel type
     * @return the list
     */
    List<Channel> listByChannelType(Integer channelType);

    /**
     * 根据平台标识及渠道类型查询渠道
     *
     * @param plat
     *            the plat
     * @param channelType
     *            the channel type
     * @return the list
     */
    List<Channel> listByPlatAndChannelType(Integer plat, Integer channelType);

    /**
     * 分页查询渠道
     *
     * @param query
     *            the query
     * @param staffId
     *            数据权限员工ID，传空或者0则不限制数据权限
     * @return the list
     */
    List<Channel> listPageByQuery(ChannelQuery query, Integer staffId);

    /**
     * 描述: 牌站变更：渠道试点只能配置二级渠道
     *          只查询渠道的id和名称
     *
     * @return java.util.List<com.zmn.plat.model.entity.channel.Channel>
     * @author jiafei
     * @since 2021/9/15 20:20
     */
    List<Channel> listEnableRankTwoChannel();
    /**
     * 描述：每天早上9点扫描全表-商务信息缺失发送钉钉消息
     * @param
     * @return List<Channel>
     * @author  hewenlang
     * @since 2022/1/7 11:05
     */
    List<Channel> listByDimissionChannel();
    /**
     * 本次相关的一级渠道及其下级渠道数量 mcc专用
     *
     * @param channelIds
     *            渠道id
     * @param status
     *            状态
     * @return the response dto
     */
    List<ChannelCountVo> listCountByStatusAndChannelIdsGroupByParentId(List<Integer> channelIds, Integer status);

    /**
     * 分页记录数
     *
     * @param query
     *            the query
     * @return the integer
     */
    Integer countByQuery(ChannelQuery query);

    /**
     * 修改状态：2启用，1停用
     *
     * @param channelIds
     *            the channel ids
     * @param status
     *            the status
     * @return the int
     */
    int updateStatusByIds(List<Integer> channelIds, Integer status, String updater);

    /**
     * 根据ID修改选择的字段
     *
     * @param record
     *            the record
     * @return the int
     */
    int updateByKeySelective(Channel record);

    /**
     * 根据id更新状态
     *
     * @param channel
     */
    int updateStatusByKey(Channel channel);

    /**
     * 根据ID修改渠道基础信息
     *
     * @param record
     *            the record
     * @return the int
     */
    int updateBaseInfoByKey(Channel record);

    /**
     * 更新排序
     *
     * @param channelId
     * @param sort
     * @param mcStaffName
     * @return
     * @author xiangjunming 20191014
     */
    int updateSortByKey(Integer channelId, Integer sort, String mcStaffName);

    /**
     * 新增渠道
     *
     * @param record
     *            the record
     * @return the int
     */
    int insert(Channel record);

    /**
     * 删除渠道
     *
     * @param channelId
     *            the channel id
     * @return the int
     */
    int deleteByKey(Integer channelId);



}